package com.train.springboot.springboottrain;

import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.annotation.MapperScans;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.transaction.annotation.EnableTransactionManagement;

//SpringBoot项目启动入口
//springboot核心注解，主要用于开启spring自动配置
/*所有的代码，都应该在入口类的同级目录或者子目录下编写*/
@SpringBootApplication/*(exclude = {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class}) 不加载数据库*/
@MapperScan(basePackages = "com.train.springboot.springboottrain.mapper")   //("com.train.springboot.springboottrain.mapper")，default属性可以省略basePackages包;开启扫描Mapper接口的包以及子目录
/*  @Mapper 需要在每一个Mapper接口类上添加，作用是扫描Dao接口
*   @MapperScan 是在SpringBoot启动入口类上添加的，作用是扫描所有的包
*   关于Mapper映射文件存放的位置的写法有以下两种：
    1.将Mapper接口和Mapper映射文件存放到src/main/java同一目录下，还需要在pom文件中手动指定资源文件夹路径resources
    2·将Mapper接口和Mapper映射文件分开存放Mapper接口类存放到src/main/java目录下Mapper映射文件存放到resources（类路径）
在springboot核心配置文件中指定mapper映射文件存放到位置
*
*  */
@EnableTransactionManagement //开启事务支持(可选项，但service接口实现类内的方法前@Transactional 必须添加)
@ServletComponentScan(basePackages = "com.train.springboot.springboottrain.servlet")    //用注方式使用Servlet
/*@ServletComponentScan(basePackages = "com.train.springboot.springboottrain.filter")*/
public class SpringbootTrainApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {

        SpringApplication.run(SpringbootTrainApplication.class, args);
    }
//打包需要继承初始化这个类，然后重写
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //参数为当前spring启动类
        //构造新资源
        return builder.sources(SpringbootTrainApplication.class);
    }
}
/*
* SpringBoot项目下使用事务
*           事务是一个完整的功能，也叫作是一个完整的业务
*           事务只跟什么SQL语句有关系？只跟DML语句有关系：增删改
*           DML,DQL,DDL,TCL,DCL
*
*  Spring Boot 使用事务非常简单，底层依然采用的是 Spring 本身提供的事务管理
➢ 在入口类中使用注解 @EnableTransactionManagement 开启事务支持
➢ 在访问数据库的 Service 方法上添加注解 @Transactional 即可
通过 SpringBoot +MyBatis 实现对数据库学生表的更新操作，在 service 层的方法中构建
异常，查看事务是否生效

* */